package main;

import scala.xml.{Node}
import utils._
import objects._
import java.util.logging.Logger

class Validator(schem:SchemaXML) {

  var listError :List[Error]=List(); 
  val schema:SchemaXML = schem;
  
  
  protected final val logger = Logger.getLogger("Validator") 
  
  /**
    * test if the schema contains the element
    **/
    def verification(elmt:Element):boolean = {
      val theNode:Seq[Node] = schema.findNode(elmt.parents, schema.document.children)
      println("La balise : " + elmt.nameBalise + "\n Les parents" + elmt.parents.toString + "\n Les fils : " + elmt.sons + "\n Les attibuts : " + elmt.atts + "\n theNode : " + theNode)
      theNode match {
        case null => listError=new Error("MissingElt",(theNode.apply(0)  \ "@name").text) :: listError;logger.warning("ERREUR le noeud pas trouve interruption!!")
        case _ => elmt.sons.length match {
          case 0 => (theNode.apply(0) \ "element").length match {
            case 0 => //Pas de probleme
            case _ => listError=new Error("NoNode","") :: listError;logger.warning("ERREUR on a pas de fils dans le document alors kil devrait en avoir " + (theNode.apply(0) \ "_").length)
          }
          case _ => (schema.checkChildren(elmt.sons, (theNode.apply(0) \ "_"))) match {
            case false => logger.warning("ERREUR pendant la verification des fils")
            case true => schema.checkAttributes(elmt.atts, theNode) match {
              case false => listError=new Error("MissingAttr","") :: listError;logger.warning("ERREUR avec les attributs")
              case true => 
            }
          }
        }
      }
      var tailleErr : int=listError.size;
      listError=schema.listError;
      if(listError.size>tailleErr){        
        val errTmp : Error=listError.head;
        listError=listError.tail;
        errTmp.ligne=elmt.ligne;
        errTmp.column=elmt.column;  
        listError=errTmp :: listError;
      }
      //Verification du type de l'element
      true
}
}
